#ifndef PIPEDPROCESS_H
#define PIPEDPROCESS_H

#include <wx/process.h>
#include <wx/txtstrm.h>
#include <wx/timer.h>

class PipedProcess : public wxProcess {
  public:
    PipedProcess( PipedProcess** pvThis, wxEvtHandler* parent, int id = wxID_ANY,
                  bool pipe = true, const wxString& dir = wxEmptyString, int index = -1 );
    ~PipedProcess();
    virtual int Launch( const wxString& cmd, unsigned int pollingInterval = 100 );
    virtual void SendString( const wxString& text );
    virtual bool HasInput();
    virtual int GetPid() { return m_Pid; }
    void ForfeitStreams();
  protected:
    virtual void OnTerminate( int pid, int status );
    virtual void OnTimer( wxTimerEvent& event );
    virtual void OnIdle( wxIdleEvent& event );
  protected:
    wxEvtHandler* m_Parent;
    wxTimer m_timerPollProcess;
    int m_Id;
    int m_Pid;
    int m_Index;
  private:
    PipedProcess** m_pvThis;
    DECLARE_EVENT_TABLE()
};

#endif
